/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Cliente;
import pojos.Empleados;

/**
 *
 * @author cvenegas
 */
public class ClientesDAO {
    
    private Session sesion;//ESTABLECE UNA SESION CON LA BASE DE DATOS
    private Transaction transaccion;//EJECUTA LAS SENTENCIAS (PARECIDO A STATMENT)
    
    
    private void iniciarConexionConBBDD()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        sesion=HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        transaccion=sesion.beginTransaction();//ARRANCA LA TRANSACCION
    }
    
     
    /**
     * ESTE METODO DEVUELVE UNA LISTA CON TODOS LOS CLIENTES DE LA BASE DE DATOS
     * @return List<Cliente>
     */
    
    public Cliente getClientePorId(String codCliente) {
        Cliente cliente;
        
        iniciarConexionConBBDD();
        cliente=(Cliente) sesion.createQuery("FROM Cliente WHERE idCliente="+codCliente).uniqueResult();
        sesion.close();
         
        return cliente;
    }
    public List<Cliente> getClientes()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        List<Cliente> listaClientes;
        iniciarConexionConBBDD();
        listaClientes = sesion.createQuery("FROM Cliente").list();
        sesion.close();
        
        return listaClientes;       
    }
    
    /**
     * INSERTA EN LA BASE DE DATOS UN CLIENTE
     * @param cliente CLIENTE QUE QUEREMOS INSERTAR,INSTANCIADO PREVIAMENTE
     */
    public void addCliente(Cliente cliente)
    {
        iniciarConexionConBBDD();
        sesion.save(cliente);
        transaccion.commit();
        sesion.close();     
    }

    public Cliente getCliente(String cif) {
        Cliente cliente;
        iniciarConexionConBBDD();
        cliente = (Cliente) sesion.createQuery("FROM Cliente WHERE cif = '" + cif + "'").uniqueResult();
        sesion.close();
        return cliente;
    }
    
    public Cliente getCliente(Integer idCliente) {
        Cliente cliente;
        iniciarConexionConBBDD();
        cliente = (Cliente) sesion.createQuery("FROM Cliente WHERE idCliente =" + idCliente).uniqueResult();
        sesion.close();
        return cliente;
    }
    
    public void eliminaCliente(Cliente cliente) throws HibernateException{ 
        try { 
            iniciarConexionConBBDD(); 
            sesion.delete(cliente); 
            transaccion.commit(); 
        } catch (HibernateException he) { 
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }

    public void editarCliente(Cliente cliente) {
        try { 
            iniciarConexionConBBDD(); 
            sesion.update(cliente); 
            transaccion.commit(); 
        } catch (HibernateException he) { 
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }
    
    
}
